package com.sky.controller.admin;

import com.sky.dto.DishDTO;
import com.sky.dto.DishPageQueryDTO;
import com.sky.result.PageResult;
import com.sky.result.Result;
import com.sky.service.DishService;
import com.sky.vo.DishVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Set;


@Api(tags = "菜品相关接口")
@Slf4j
@RestController
@RequestMapping("/admin/dish")
public class DishController {
    @Autowired
    private DishService dishService;
    @Autowired
    private RedisTemplate redisTemplate;

    //新增菜品
  @CacheEvict(value = "dish",key = "#dto.categoryId")
  @ApiOperation("新增菜品")
  @PostMapping
    public Result addDish(@RequestBody DishDTO dto){
      log.info("新增菜品：{}", dto);
      dishService.addDish(dto);
      //清理redis缓存,否则缓存中的数据不会更新  使用@CacheEvict代替了缓存注解
//    redisTemplate.delete("dish_" + dto.getCategoryId());

      return Result.success();
  }
  //菜品分页查询
    @ApiOperation("菜品分页查询")
    @GetMapping("/page")
    public Result<PageResult> page(DishPageQueryDTO dto){
        log.info("菜品分页查询：{}", dto);
        PageResult pageResult = dishService.pageQuery(dto);
        return Result.success(pageResult);
    }
    //批量删除
    @CacheEvict(value = "dish",allEntries = true) //代替下面注释内容,清理缓存数据
    @ApiOperation("批量删除")
    @DeleteMapping
    public Result delete(@RequestParam List<Long> ids){
      log.info("批量删除：{}", ids);
      dishService.delete(ids);
//      //清理所有以dish_开头的缓存数据,否则缓存中的数据不会更新
//      Set keys = redisTemplate.keys("dish_*"); //使用注解代替
//      redisTemplate.delete(keys);

      return Result.success();
    }

    //回显菜品
    @ApiOperation("回显菜品")
    @GetMapping("/{id}")
    public Result<DishVO> getById(@PathVariable Long id){
      log.info("回显菜品：{}", id);
      DishVO dishVO = dishService.getById(id);
      return Result.success(dishVO);
    }
    //修改菜品
    @CacheEvict(value = "dish",allEntries = true)//代替下面注释内容,清理缓存数据
    @ApiOperation("修改菜品")
    @PutMapping
    public Result update(@RequestBody DishDTO dto){
      log.info("修改菜品：{}", dto);
      dishService.update(dto);
      //清理redis缓存,否则缓存中的数据不会更新
//      Set keys = redisTemplate.keys("dish_*");
//      redisTemplate.delete(keys);
      return Result.success();
    }
    //起售停售
    @CacheEvict(value = "dish",allEntries = true)//代替下面注释内容,清理缓存数据
    @ApiOperation("起售停售")
    @PostMapping("status/{status}")
    public Result startOrStop(@PathVariable Integer status, Long id){
      log.info("起售停售：{}", id);
      dishService.startOrStop(status, id);
      //清理redis缓存,否则缓存中的数据不会更新
//      Set keys = redisTemplate.keys("dish_*");
//      redisTemplate.delete(keys);
      return Result.success();
    }
    //根据分类id查询菜品
  @ApiOperation("根据分类id查询菜品")
  @GetMapping("/list")
  public Result<List<DishVO>> list(Long categoryId){
    log.info("根据分类id查询菜品：{}", categoryId);
    List<DishVO> list = dishService.list(categoryId);
    return Result.success(list);
  }
}
